import { VUE_APP_API_URL_V2 } from '@/config'

/**
 * 将对象转换为 query string
 * @param {Object} params - 参数对象
 * @returns {string} query string
 */
function toQueryString(params) {
    return Object.entries(params)
        .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
        .join('&');
}

/**
 * 处理请求URL
 * @param {string} url - 请求路径
 * @returns {string} 处理后的URL
 */
function handleUrl(url) {
    // 已经是完整URL则直接返回
    if (url.startsWith('http://') || url.startsWith('https://')) {
        return url;
    }
    // console.log("VUE_APP_API_URL_V2",VUE_APP_API_URL_V2)
    // 添加基础URL
    return VUE_APP_API_URL_V2 + (url.startsWith('/') ? url : `/${url}`);
}

/**
 * 同步 GET 请求
 * @param {string} url - 请求地址
 * @param {Object} [data] - 请求参数
 * @param {Object} [headers] - 自定义请求头
 * @returns {Promise} 返回 Promise 包含响应数据
 */
function get(url, data = {}, headers = {}) {
    return new Promise((resolve, reject) => {
        const queryString = toQueryString(data);
        const fullUrl = handleUrl(url) + (url.includes('?') ? '&' : '?') + queryString;
        console.log("VUE_APP_API_URL_V2",fullUrl)
        uni.request({
            url: fullUrl,
            method: 'GET',
            header: headers,
            success: (res) => resolve(res.data),
            fail: (err) => reject(err)
        });
    });
}

/**
 * 同步 POST 请求
 * @param {string} url - 请求地址
 * @param {Object} [data] - 请求数据
 * @param {Object} [headers] - 自定义请求头
 * @returns {Promise} 返回 Promise 包含响应数据
 */
async function post(url,data) {
    try {
        const res = await new Promise((resolve, reject) => {
			
			console.log("数据",VUE_APP_API_URL_V2+url,data)
			
            uni.request({
                url: VUE_APP_API_URL_V2+url,
                method: 'POST',
                header: {
                    'Content-Type': 'application/json'
                },
                data: data,
                success: (res) => resolve(res),
                fail: (err) => reject(err)
            });
        });
        
        console.log("请求结果:", res.data);
        return res.data; // 返回数据
    } catch (error) {
        console.error("请求出错:", error);
        throw error; // 抛出错误
    }
}


/**
 * 通用请求函数
 * @param {string} url 请求地址
 * @param {object} data 请求数据
 * @param {string} method 请求方法（GET/POST，默认POST）
 * @returns {Promise} 返回请求结果（同步风格）
 * 
 * 
import { http } from './api'
export const tenantV2 = {
 async  getTenantByName(data) {
		console.log("/app/tenant/get-by-name",data)
     return await http.request('/app/tenant/get-by-name', data)
   }
 };
 * 
 */
async function request(url, data = {}, method = 'POST') {
    try {
        // 自动识别是否为JSON数据
        const isJson = typeof data === 'object' && !(data instanceof Array);
        const contentType = isJson ? 'application/json' : 'application/x-www-form-urlencoded';
        
        // 处理GET请求的URL拼接（将data转为query参数）
        const isGet = method.toUpperCase() === 'GET';
        const finalUrl = isGet 
            ? `${VUE_APP_API_URL_V2}${url}?${Object.keys(data).map(key => `${key}=${encodeURIComponent(data[key])}`).join('&')}`
            : `${VUE_APP_API_URL_V2}${url}`;
        
        // 处理请求数据
        const requestData = isGet ? null : (isJson ? JSON.stringify(data) : data);

        // console.log(`请求参数 [${method}]:`, {
        //     url: finalUrl,
        //     data: requestData
        // });

        const res = await new Promise((resolve, reject) => {
            uni.request({
                url: finalUrl,
                method: method,
                header: { 
                    'Content-Type': contentType,
                    // 可添加其他全局headers（如token）
                },
                data: requestData,
                success: (res) => {
                    // 统一处理非200状态码
                    if (res.statusCode !== 200) {
                        reject(new Error(`HTTP ${res.statusCode}: ${res.data?.message || '请求失败'}`));
                    } else {
                        resolve(res.data);
                    }
                },
                fail: (err) => {
                    reject(new Error(`请求失败: ${err.errMsg || '网络错误'}`));
                }
            });
        });

        return res;
    } catch (error) {
        console.error(`请求异常 [${method} ${url}]:`, error.message);
        throw error; // 抛出错误供调用方处理
    }
}



// 导出为对象
export const http = {
	request,
    get,
    post,
    toQueryString // 如果需要也可以导出工具方法
};

// 使用示例
// async function exampleUsage() {
//     try {
//         // GET 请求示例
//         const articles = await http.get('/articles', { page: 1, limit: 10 });
//         console.log('文章列表:', articles);
        
//         // POST 请求示例
//         const result = await http.post('/user/login', {
//             username: 'admin',
//             password: '123456'
//         });
//         console.log('登录结果:', result);
        
//     } catch (error) {
//         console.error('请求失败:', error);
//     }
// }
// exampleUsage();